<?php
/**
 * 微信支付
 */
namespace app\wechat\controller;
use think\Controller;
use app\common\model\User;
use app\common\model\Order;
use app\common\model\Wepay;
use app\common\model\Waters;
use app\common\model\User_account;
Vendor('WxPayApi.WxPay#JsApiPay');
Vendor('WxPayApi.WxPay#NativePay');
Vendor('WxPayApi.Qrcode');
class Pays extends Controller
{
	/**
     * 资源人认证费支付页面
     * @return [type] [description]
     */
    public function wxpay(){

		//商品信息 价格(分)
		$tradedes = '资源人认证费';
		$amoney = '1';

        $user = new User();
		$wepay = new Wepay();
		$res = $wepay->aOrder($tradedes,$amoney);
        //用户openid
        $openId = $res['order']['openid'];
       
        $uinfo = $user->getOne('*',['third_id'=>$openId]);
        if($uinfo){
        	$userAccount = new User_account;
			$infos = $userAccount->getOne(['uid'=>$uinfo['uid'],'type'=>1],'*');
			if($infos['state']==1){
				//待支付,重新生成订单号 并更改数据库

				$where = ['uid'=>$uinfo['uid'],'type'=>1];
				$save = ['oid'=>$res['order']['oid'],'t'=>time()];

				$userAccount->where($where)->update($save);
				return view('',$res);
			}elseif($infos['state']==2){
				$res['oinfo'] = $infos;
				return view('',$res);
			}else{
				//第一次进入则加入记录
				$data = [
					'uid'=>$uinfo['uid'],
					'type'=>1,
					'oid'=>$res['order']['oid'],
					'amount'=>$amoney,
					'state'=>1,
					'pmode'=>1,
					't'=>time()
				];
				$userAccount->insert($data);
				return view('',$res);
			}
        }else{
        	$this->error('请用户先进行身份认证');
        }
    }

    /**
     * 微信支付二维码生成订单(模式二)
     * @return [type] [description]
     */
    public function nativepay(){
    	exit;

		$input = new \WxPayUnifiedOrder();
		$configModel = new \WxPayConfig();
    	$nativeModel = new \NativePay();

		//支付成功回调地址
		$notify_url = config("WECHAT_NOTIFY_URL");

		//商品或支付单简要描述
		$input->SetBody("实唯科技-燃气报警器");
		
		//设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
		$payOrderTrade = $configModel::MCHID.date("YmdHis");
		$input->SetOut_trade_no($payOrderTrade);
		//设置订单总金额，只能为整数，详见支付金额 （单位为:分）
		$input->SetTotal_fee("1");
		//设置订单生成时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010
		$input->SetTime_start(date("YmdHis"));
		//设置订单失效时间，格式为yyyyMMddHHmmss，如2009年12月27日9点10分10秒表示为2009122709101
		$input->SetTime_expire(date("YmdHis", time() + 600));
 		
		//设置接收微信支付异步通知回调地址
		$input->SetNotify_url($notify_url);
		//设置取值如下：JSAPI，NATIVE，APP
		$input->SetTrade_type("NATIVE");
		//商品ID(扫码必传)
		$input->SetProduct_id(date("YmdHis"));

    	$dataUrl = $nativeModel->GetPayUrl($input);

    	$dataUrl["code_url"] = base64_encode($dataUrl["code_url"]);
    	$dataUrl["out_trade_no"] = $payOrderTrade;

    	return view('',['dataUrl'=>$dataUrl]);
    }

    /**
     * 生成微信支付二维码
     * @param [string]  url   二维码内容
     * @return [type] [description]
     */
    public function codepay(){
    	$url = input('codeurl');
    	if(!$url){ exit; }

    	$url = base64_decode($url);

		//实例化二维码类
    	$qrcodeModel = new \QRcode();
    	//生成二维码
    	$qrcodeModel->png($url);
    }

    /**
     * 生成微信支付二维码(模式一)
     * @return [type] [description]
     */
    public function onePay(){
		$input = new \WxPayUnifiedOrder();
		$configModel = new \WxPayConfig();
    	$nativeModel = new \NativePay();

		//商品或支付单简要描述
		// $input->SetBody("实唯科技-燃气报警器");
		
		// //设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
		// $payOrderTrade = $configModel->MCHID.date("YmdHis");
		// $input->SetOut_trade_no($payOrderTrade);
		// //设置订单总金额，只能为整数，详见支付金额 （单位为:分）
		// // $input->SetTotal_fee("1");
		// //设置订单生成时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010
		// $input->SetTime_start(date("YmdHis"));
		// //设置订单失效时间，格式为yyyyMMddHHmmss，如2009年12月27日9点10分10秒表示为2009122709101
		// $input->SetTime_expire(date("YmdHis", time() + 600));

		//设置取值如下：JSAPI，NATIVE，APP
		// $input->SetTrade_type("NATIVE");

    	$oneUrl = $nativeModel->GetPrePayUrl(date("YmdHis"));

		//实例化二维码类
    	$qrcodeModel = new \QRcode();
    	//生成二维码
    	$qrcodeModel->png($oneUrl);
    }

    /**
     * 查询订单是否存在
     * @param [string] orderId 商品号
     * @return [type] [description]
     */
    public function sOrder(){
    	if(request()->isAjax()){
    		$orderId = input("post.transId");
    		$wxpayHelp = new Wepay();
    		$result = $wxpayHelp->Queryorder($orderId,true);

	        if(array_key_exists("return_code", $result)
	            && array_key_exists("result_code", $result)
	            && array_key_exists("trade_state", $result)
	            && $result["return_code"] == "SUCCESS"
	            && $result["result_code"] == "SUCCESS"
	            && $result["trade_state"] == "SUCCESS")
	        {
	            exit(true);
	        }
	        exit(false);
    	}
    }
}